/* 
 *  Copyright (C) 2008 Jens Meiß
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package com.googlecode.hmvc4gwt.example.hmvcblog.service.services.blog;

import java.util.List;
import java.util.Set;

import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogEditDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogEditIdDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogNewDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogPreviewDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogRemoveDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogUpdateDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.exceptions.BlogNotFoundException;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.exceptions.BlogTitleEmptyException;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.exceptions.NotBlogOwnerException;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.dashboard.UserBlogTitleDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.user.UserSessionId;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.user.exception.NotLoggedInException;

/**
 * 
 *
 * @author jens.meiss
 */
public interface IBlogService {
	
	public void addBlog(BlogNewDTO blogNewDTO) throws BlogTitleEmptyException, NotLoggedInException;
	
	public void updateBlog(BlogUpdateDTO blogUpdateDTO) throws BlogTitleEmptyException, NotLoggedInException, BlogNotFoundException, NotBlogOwnerException;
	
	public BlogDTO getBlog(Integer id)  throws BlogNotFoundException;
	
	public BlogDTO getBlog(String name) throws BlogNotFoundException;

	public List<UserBlogTitleDTO> getListBlogTitle(UserSessionId userSessionId) throws NotLoggedInException;

	public Set<BlogPreviewDTO> getSetBlogPreview();
	
	public void removeBlog(BlogRemoveDTO blogRemoveDTO) throws NotLoggedInException, BlogNotFoundException, NotBlogOwnerException;
	
	public BlogEditDTO getBlogEditDTO(BlogEditIdDTO blogEditIdDTO) throws NotLoggedInException, NotBlogOwnerException, BlogNotFoundException;
}
